package com.ferris.redbook.service.strategy;

import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.Map;

/**
 * 文件存储策略接口
 * 定义统一的文件操作接口，便于切换不同的存储实现
 */
public interface FileStorageStrategy {

    /**
     * 上传文件
     * @param file 文件对象
     * @param key 文件存储路径/名称
     * @param metadata 元数据
     * @return 文件访问URL
     */
    String upload(MultipartFile file, String key, Map<String, String> metadata);

    /**
     * 上传文件流
     * @param inputStream 文件输入流
     * @param key 文件存储路径/名称
     * @param contentType 文件类型
     * @param metadata 元数据
     * @return 文件访问URL
     */
    String upload(InputStream inputStream, String key, String contentType, Map<String, String> metadata);

    /**
     * 获取文件访问URL
     * @param key 文件存储路径/名称
     * @return 文件访问URL
     */
    String getUrl(String key);

    /**
     * 删除文件
     * @param key 文件存储路径/名称
     * @return 是否删除成功
     */
    boolean delete(String key);

    /**
     * 获取文件元数据
     * @param key 文件存储路径/名称
     * @return 元数据Map
     */
    Map<String, String> getMetadata(String key);

    /**
     * 文件是否存在
     * @param key 文件存储路径/名称
     * @return 是否存在
     */
    boolean exists(String key);
}